package autenticacao

class Usuario {

    transient springSecurityService

    String username
    String password
    
    String nome
    String rg
    String cpf
    String endereco
    String enderecoNum
    String cep
    String cidade
    String estado
    String telefone
    String celular
    String operadoraCel
    String email1
    String email2
    String msn
    String skype
    
    boolean enabled
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired

    static constraints = {
        username blank: false, unique: true
        password blank: false
        
        nome (blank: false)
        rg ()
        cpf (blank: false, unique: true)
        endereco (size: 0..10000)
        enderecoNum ()
        cep (maxSize:10)
        cidade ()
        estado (inList:[
                'Acre-AC',
                'Alagoas-AL',
                'Amapá-AP',
                'Amazonas-AM',
                'Bahia-BA',
                'Ceará-CE',
                'Distrito Federal-DF',
                'Espírito Santo-ES',
                'Goiás-GO',
                'Maranhão-MA',
                'Mato Grosso-MT',
                'Mato Grosso do Sul-MS',
                'Minas Gerais-MG',
                'Pará-PA',
                'Paraíba-PB',
                'Paraná-PR',
                'Pernambuco-PE',
                'Piauí-PI',
                'Rio de Janeiro-RJ',
                'Rio Grande do Norte-RN',
                'Rio Grande do Sul-RS',
                'Rondônia-RO',
                'Roraima-RR',
                'Santa Catarina-SC',
                'São Paulo-SP',
                'Sergipe-SE',
                'Tocantins-TO'])
        telefone ()
        celular ()
        operadoraCel (inList:['VIVO', 'TIM', 'CLARO', 'OI', 'SERCOMTEL'])
        email1 (email:true)
        email2 (email:true)
        msn (email:true)
        skype ()
    }

    static mapping = {
        password column: '`password`'
    }

    Set<Perfil> getAuthorities() {
        UsuarioPerfil.findAllByUsuario(this).collect { it.perfil } as Set
    }

    def beforeInsert() {
        encodePassword()
    }

    def beforeUpdate() {
        if (isDirty('password')) {
            encodePassword()
        }
    }

    protected void encodePassword() {
        password = springSecurityService.encodePassword(password)
    }
    
    String toString(){
        return "${nome}"
    }
}
